﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.UI.Bovespa.Clientes.Communication.Bovespa.Cliente.Cliente;

namespace Sinacor.UI.Bovespa.Clientes.Communication.Translator.DataContractToModel

/// <summary>
/// Construtor
/// </summary>
/// <param name="view">View</param>
/// Historico:
/// Data : 12/08/2009
/// Autor: Felipe Barbosa Gonzalez
/// 7Comm Informativa   
/// Obs.: Criado as traduçoes e colocados alguns comentarios
{
    public class Cliente
    {

        #region Converte DataContract.Response.ClienteResponse para Model.Cliente

        public Model.Parameter.Cliente ToCliente(ClienteResponse cliente)
        {
            Model.Parameter.Cliente toCliente = null;
            if (cliente != null)
            {
                toCliente = new Sinacor.UI.Bovespa.Clientes.Model.Parameter.Cliente();
                toCliente.Apelido = cliente.Apelido;
                toCliente.Assessor = cliente.Assessor;
                //to.BancoContaCorrente = cliente.BancoContaCorrente;
                // to.BancoDividendo = cliente.BancoDividendo;
                //TODO : VER COM ARQUITETO
                toCliente.ClienteBroker = cliente.ClienteBroker;
                toCliente.ClienteContaDeposito = cliente.ClienteContaDeposito;
                toCliente.ClienteContaInvestimento = cliente.ClienteContaInvestimento;
                toCliente.Codigo = cliente.Codigo;
                toCliente.CodigoCarteira = cliente.CodigoCarteira;
                toCliente.CodigoClienteInstitucional = cliente.CodigoClienteInstitucional;
                toCliente.CodigoOperacionalCVM = cliente.CodigoOperacionalCVM;
                toCliente.ComplementoNome = cliente.ComplementoNome;
                toCliente.CPFCNPJ = cliente.CPFCNPJ;
                toCliente.CPFCNPJTexto = cliente.CPFCNPJTexto;
                toCliente.CodigoOperacionalCVM = cliente.CodigoOperacionalCVM;
                toCliente.ComplementoNome = cliente.ComplementoNome;
                toCliente.DataNascimentoFundacao = cliente.DataNascimentoFundacao;
                toCliente.Dependencia = cliente.Dependencia;
                toCliente.DescricaoBloqueio = cliente.DescricaoBloqueio;
                toCliente.DigitoClienteContaDeposito = cliente.DigitoClienteContaDeposito;
                toCliente.DigitoClienteContaInvestimento = cliente.DigitoClienteContaInvestimento;
                toCliente.DigitoVerificador = cliente.DigitoVerificador;
                //to.Endereco = cliente.Endereco;
                //Erro objeto para lista
                //TODO : VER COM ARQUITETO
                toCliente.isBloqueado = cliente.isBloqueado;
                toCliente.isClienteBroker = cliente.isClienteBroker;
                toCliente.isClienteQualificado = cliente.isClienteQualificado;
                toCliente.IsContaInvestimento = cliente.IsContaInvestimento;
                toCliente.isOperacaoCarteiraCliente = cliente.isOperacaoCarteiraCliente;
                toCliente.isPessoaVinculada = cliente.isPessoaVinculada;
                //to.LimitesOperacionais = cliente.LimitesOperacionais;
                //Erro objeto para lista
                //TODO : VER COM ARQUITETO
                toCliente.Nome = cliente.Nome;
                toCliente.NomeResumido = cliente.NomeResumido;
                toCliente.Origem = cliente.Origem;
                toCliente.PercentualReducaoAcrescimo = cliente.PercentualReducaoAcrescimo;
                toCliente.PercentualTotal = cliente.PercentualTotal;
                //to.PosicaoContasCorrente = cliente.PosicaoContasCorrente;
                //TODO : VER COM ARQUITETO
                //to.PosicaoCustodia = cliente.PosicaoCustodia;
                //TODO : VER COM ARQUITETO
                switch (cliente.Situacao)
                {
                    case TipoSituacao.Ativo:
                        toCliente.Situacao = Model.Enum.TipoSituacaoCliente.Ativo;
                        break;
                    case TipoSituacao.Inativo:
                        toCliente.Situacao = Model.Enum.TipoSituacaoCliente.Inativo;
                        break;
                }

                switch (cliente.TipoLiquidacao)
                {
                    case TipoLiquidacao.Arbitragem:
                        toCliente.TipoLiquidacao = Model.Enum.TipoLiquidacao.Arbitragem;
                        break;
                    case TipoLiquidacao.Custodiante:
                        toCliente.TipoLiquidacao = Model.Enum.TipoLiquidacao.Custodiante;
                        break;
                    case TipoLiquidacao.Normal:
                        toCliente.TipoLiquidacao = Model.Enum.TipoLiquidacao.Normal;
                        break;
                }
                //to.Telefone = cliente.Telefone;
                //Objeto para lista
                //TODO : VER COM ARQUITETO
                toCliente.TipoBloqueio = cliente.TipoBloqueio;
                toCliente.TipoFaxDefault = cliente.TipoFaxDefault;

                switch (cliente.TransmissaoOrdem)
                {
                    case TipoTransmissaoOrdem.OrdemEscritaPorEmail:
                        toCliente.TransmissaoOrdem = Model.Enum.TipoTransmissaoOrdem.OrdemEscritaPorEmail;
                        break;
                    case TipoTransmissaoOrdem.OrdemEscritaPorFax:
                        toCliente.TransmissaoOrdem = Model.Enum.TipoTransmissaoOrdem.OrdemEscritaPorFax;
                        break;
                    case TipoTransmissaoOrdem.OrdemVerbal:
                        toCliente.TransmissaoOrdem = Model.Enum.TipoTransmissaoOrdem.OrdemVerbal;
                        break;
                    case TipoTransmissaoOrdem.OrdemEscritaPorCarta:
                        toCliente.TransmissaoOrdem = Model.Enum.TipoTransmissaoOrdem.OrdemEscritaPorCarta;
                        break;

                }
            }
            return toCliente;
        }
        #endregion


        #region Métodos
        /// <summary>
        /// Traduz de DataContract para Model
        /// </summary>
        /// <param name="from">ResultadoValidacaoClienteResponse</param>
        /// <returns>Model.ResultadoValidacaoCliente</returns>
        public Model.ResultadoValidacaoCliente ToResultadoValidacaoCliente(ResultadoValidacaoClienteResponse from) 
        {
            Model.ResultadoValidacaoCliente to = new Model.ResultadoValidacaoCliente();
            to.ApelidoCliente = from.ApelidoCliente;
            to.Resultado = new Sinacor.Infra.Common.Validation.ValidationResult();
            to.Resultado.Error = from.Resultado.Error;
            to.Resultado.IsValid = from.Resultado.IsValid;
            return to;
        }
        #endregion
    }
}
